// Package router 路由包，负责处理HTTP路由配置
package router

import (
	"windsurf-project/internal/interfaces/handlers"

	"github.com/gin-gonic/gin"
)

// Router 路由器结构体
// 包含Gin引擎和用户处理器
type Router struct {
	engine      *gin.Engine           // engine Gin框架的引擎实例
	userHandler *handlers.UserHandler // userHandler 用户处理器实例
	apiHandler  *handlers.APIHandler  // apiHandler API信息处理器实例
}

// NewRouter 创建新的路由器实例
func NewRouter(userHandler *handlers.UserHandler) *Router {
	engine := gin.Default()

	// 启用CORS（跨域资源共享）
	engine.Use(func(c *gin.Context) {
		c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
		c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")

		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}

		c.Next()
	})

	// 创建路由器实例
	r := &Router{
		engine:      engine,
		userHandler: userHandler,
		apiHandler:  handlers.NewAPIHandler(),
	}

	// 设置静态文件处理器
	staticHandler := handlers.NewStaticHandler()
	r.engine.Use(staticHandler.ServeStatic)

	// API版本分组
	v1 := r.engine.Group("/api/v1")
	{
		// API信息路由
		v1.GET("", r.apiHandler.ListAPIs)

		// 用户相关路由
		users := v1.Group("/users")
		{
			users.POST("", r.userHandler.CreateUser)
			users.GET("", r.userHandler.ListUsers)
			users.GET("/:id", r.userHandler.GetUser)
			users.PUT("/:id", r.userHandler.UpdateUser)
			users.DELETE("/:id", r.userHandler.DeleteUser)
		}
	}

	// 处理404
	r.engine.NoRoute(staticHandler.HandleNotFound)

	return r
}

// SetupRoutes 配置所有路由规则
func (r *Router) SetupRoutes() {
	// 由于路由规则已经在NewRouter中配置，因此此方法不再需要
}

// Run 启动HTTP服务器
func (r *Router) Run(addr string) error {
	return r.engine.Run(addr)
}
